﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Transactions;
using BGCOP.CAVTOP.BUSINESSLAYER;
using BGCOP.CAVTOP.COMMON;
using Telerik.WinControls.UI;

namespace BGCOP.CAVTOP.WINFORMS
{
    public partial class frmVisitante : Form
    {
        #region definicion de variables
        AutoCompleteStringCollection txtC;
        AutoCompleteStringCollection txtT;

        private bool agrego;
        public int indice;
        public decimal idVisitanteF;
        public decimal idvisitaprogramada;
        #endregion
        

        public frmVisitante()
        {
            InitializeComponent();
            agrego = false;
            indice = 0;
        }
        public static AutoCompleteStringCollection LoadAutoIdentificacion(List<TVisitante> ao )
        {
            AutoCompleteStringCollection stringCol = new AutoCompleteStringCollection();
            foreach (var t in ao)
            {
                stringCol.Add(t.identificacionVisitante);
            }
            return stringCol;
        }
        public static AutoCompleteStringCollection LoadAutoIdentificacion(List<TTarjeta> ao)
        {
            AutoCompleteStringCollection stringCol = new AutoCompleteStringCollection();
            foreach (var t in ao)
            {
                stringCol.Add(t.numtarjeta);
            }
            return stringCol;
        }
        private void frmVisitante_Load(object sender, EventArgs e)
        {
           Application.DoEvents();
           timer1.Enabled = true;
        }
        public void inicio()
        {
            cmbProgramada.SelectedIndex = -1;
            txtNombre.KeyPress += new KeyPressEventHandler(txtNombre_KeyPress);
            txtEmpresa.KeyPress += new KeyPressEventHandler(txtNombre_KeyPress);
            txtTelefonos.KeyPress += new KeyPressEventHandler(txtNombre_KeyPress);
            txtDireccion.KeyPress += new KeyPressEventHandler(txtNombre_KeyPress);
            dtFecha1.Value = DateTime.Now;
            dtFecha2.Value = DateTime.Now.AddHours(12);
            
            masterDBACEntities db = new masterDBACEntities();
            //txtC = LoadAutoIdentificacion(db.TVisitante.ToList());
            txtT = LoadAutoIdentificacion(db.TTarjeta.ToList());
            //txtDocIdentidad.AutoCompleteDataSource = txtC;
            limpiaCampos();
            
        }

        void txtNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            //se realiza la busqueda para determinar si se encuentra registrado
            try
            {
                
                if (((RadTextBoxControl )sender).Name == "txtNombre" && e.KeyChar == 13)
                {
                    SendKeys.Send("{TAB}");
                }
                else if (((RadTextBoxControl)sender).Name == "txtEmpresa" && e.KeyChar == 13)
                {
                    SendKeys.Send("{TAB}");
                }
                else if (((RadTextBoxControl)sender).Name == "txtTelefonos" && e.KeyChar == 13)
                {
                    SendKeys.Send("{TAB}");
                }
                else if (((RadTextBoxControl)sender).Name == "txtDireccion" && e.KeyChar == 13)
                {
                    SendKeys.Send("{TAB}");
                }

            }
            catch (Exception ex)
            {
                
                
            }
            
            
        }

        private void txtDocIdentidad_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                //se realiza la busqueda para determinar si se encuentra registrado
                Utilitys ut = new Utilitys();
                masterDBACEntities db = new masterDBACEntities();
                var consulta = (from rg in db.TVisitante
                              where rg.identificacionVisitante == txtDocIdentidad.Text
                              select rg).FirstOrDefault();
                panel1.Visible = false;
                if (consulta != null)
                {
                    //si esta hay dos opciones
                    //1. es una nueva entrada de un visitante existente
                        //1. si es nueva puede ser una nueva programada para un visitante futuro
                        //2.  confirmar la entrada de una visita ya programada ose ya entra y se asigna tarjeta 
                    //2. se presenta una programada
                   
                    
                    txtId2.Text = consulta.identificacionVisitante;
                    fotoUsuario.BackgroundImage = ut.Bytes2Image(consulta.foto);
                    txtNombre.Text = consulta.nombreVisitante;
                    txtEmpresa.Text = consulta.empresa;
                    txtDireccion.Text = consulta.direccion;
                    txtTelefonos.Text = consulta.telefonos;
                    txtObservaciones.Text = consulta.observacionesVisitante;
                    idVisitanteF = consulta.idVisitante;
                    button1.Focus();
                    agrego = false;
                    indice = 2; //el visitante existe puede ser una entrada nueva 
                    var squery = (from a in db.TVisitanteVisitaProgramada
                                  join b in db.TEmpleado on a.idEmpleadoAutorizaEntrada equals b.idEmpleado
                                  join c in db.TDivisionEmpresa on b.idDivisionEmpresa equals c.IdDivisionEmpresa
                                  join d in db.TEmpresa on c.IdEmpresa equals d.idEmpresa
                                  join f in db.TVisitaProgramada on a.idVisitaProgramada equals f.idVisitaProgramada 
                                  where a.idVisitante == consulta.idVisitante && f.DescripcionVisita != "Entrada Portería" &&
                                  a.fechaSalida >= DateTime.Now
                                  
                                  select new
                                  {
                                      Empresa = d.RazonSocial,
                                      Division = c.NombreDivision,
                                      Empleado = b.nombre,
                                      fecha_Lllegada = a.fechaLlegada,
                                      fecha_Salida = a.fechaSalida,
                                      idvisi = a.idVisitante,
                                      idvisitap = a.idVisitaProgramada,
                                      idemp=d.idEmpresa,
                                      iddivi=c.IdDivisionEmpresa,
                                      idemple = b.idEmpleado,
                                      descr= f.DescripcionVisita,
                                      osv = f.ObservacionesVisita 
                                  }).ToList();
                    
                    
                    try
                    {
                        if (squery.Count > 0)
                        {
                            indice = 3; //hay una programada pendiente y se debe procesar toda
                            //colocar informacion en la ventana acerca de la visita}
                            panel1.Visible = true;
                            lblVisitaProgramadaInfo.Text = "Visita: " + squery[0].descr +"\r\n";
                            lblVisitaProgramadaInfo.Text += "Empresa Destino: " + squery[0].Empresa + "\r\n";
                            lblVisitaProgramadaInfo.Text += "Empleado: " + squery[0].Empleado + "\r\n";
                            lblVisitaProgramadaInfo.Text += "Obsv :" + squery[0].osv;
                            radDesktopAlert1.ContentImage = BGCOP.CAVTOP.WINFORMS.Properties.Resources.calendar_icon48;
                            radDesktopAlert1.CaptionText = "Visita Programada";
                            radDesktopAlert1.ContentText = "El visitante tiene una vista Programada.\r\nVerifique la informacion adicional en la pantalla.!";
                            radDesktopAlert1.FixedSize = new Size(450, 150);
                            radDesktopAlert1.Show();
                            lblPreprogramada.BackColor = Color.YellowGreen;
                            lblPreprogramada.Text = "Tiene una visita Programa";
                            rdEmpresaDestino.SelectedValue = squery[0].idemp;
                            rdDivisionDestino.SelectedValue = squery[0].iddivi;
                            rdEmpleadoDestino.SelectedValue = squery[0].idemple;
                            dtFecha1.Value = (DateTime) squery[0].fecha_Lllegada;
                            dtFecha2.Value = (DateTime) squery[0].fecha_Salida; 
                            idVisitanteF = consulta.idVisitante;
                            idvisitaprogramada = squery[0].idvisitap;
                        }
                        else
                        {
                            panel1.Visible = false;
                            lblPreprogramada.BackColor = Color.White;
                            lblPreprogramada.Text = "...";
                        }
                    }
                    catch (Exception)
                    {
                        
                        //throw;
                    }
                }
                else
                {
                    //no esta quiere decir que es nueva
                    if (MessageBox.Show("Desea Agregar un nuevo registro?", "Gestion CAV12", MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        agrego = true;
                        indice = 1; //solo agregar las tablas y asignar la tarjeta
                        txtId2.Text = txtDocIdentidad.Text;
                        txtNombre.Focus();
                    }
                }
                
                
                    
                    
                
            }
        }

        

        private void limpiaCampos()
        {
            panel1.Visible = false;
            //this.tTarjetaTableAdapter.FillByNoutilizada(this.masterDBACDataSet.TTarjeta);
            lblPreprogramada.BackColor = Color.White;
            lblPreprogramada.Text = "...";
            txtDocIdentidad.Focus();
            
            txtId2.Text = "";
            txtDocIdentidad.Text = "";
            fotoUsuario.BackgroundImage = Properties.Resources.personal;
            txtNombre.Text = "";
            txtEmpresa.Text = "";
            txtDireccion.Text = "";
            txtTelefonos.Text = "";
            txtObservaciones.Text = "";
            cmbTarjeta.SelectedIndex = -1;
            rdDivisionDestino.SelectedIndex = -1;
            rdEmpleadoDestino.SelectedIndex = -1;
            rdEmpresaDestino.SelectedIndex = -1;
            dtFecha1.Value = DateTime.Now;
            dtFecha2.Value = DateTime.Now.AddHours(12);
            label15.Text = "";
            label18.Text = "";
            cmbProgramada.SelectedIndex = -1;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        

        private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox1.Checked == false)
            {
                if (cmbTarjeta.SelectedIndex < 0)

                {
                    radDesktopAlert1.ContentImage = BGCOP.CAVTOP.WINFORMS.Properties.Resources.accept_icon__1_;
                    radDesktopAlert1.CaptionText = "Aviso";
                    radDesktopAlert1.ContentText = "Error No existe la tarjeta";
                    radDesktopAlert1.FixedSize = new Size(450, 150);
                    radDesktopAlert1.Show();
                    return;
                }
                if (txtNombre.Text == "")
                {
                    radDesktopAlert1.ContentImage = BGCOP.CAVTOP.WINFORMS.Properties.Resources.accept_icon__1_;
                    radDesktopAlert1.CaptionText = "Aviso";
                    radDesktopAlert1.ContentText = "nombre invalido";
                    radDesktopAlert1.FixedSize = new Size(450, 150);
                    radDesktopAlert1.Show();
                    return;
                }
                if (rdEmpleadoDestino.SelectedIndex < 0)
                {
                    radDesktopAlert1.ContentImage = BGCOP.CAVTOP.WINFORMS.Properties.Resources.accept_icon__1_;
                    radDesktopAlert1.CaptionText = "Aviso";
                    radDesktopAlert1.ContentText = "destino no seleccionado";
                    radDesktopAlert1.FixedSize = new Size(450, 150);
                    radDesktopAlert1.Show();
                    return;
                }
            }
            
            Utilitys ut = new Utilitys();
            decimal idVisitante = idVisitanteF, idVisitaProgramada = 0;
            using (masterDBACEntities db = new masterDBACEntities())
            {
                using (TransactionScope transaction = new TransactionScope())
                {
                    TVisitaProgramada tv2;
                    TVisitanteVisitaProgramada tv4;
                    switch (indice)
                    {
                        case 1:
                            //es nuevo y se debe generar los cambios de la tabla para agregar un nuevo registro
                            //lo primero es agregar uno nuevo en la tabla visitante

                            #region 1. Insertar visitante

                            if (txtNombre.Text != "")
                            {


                                var tv1 = new TVisitante()
                                                    {
                                                        nombreVisitante = txtNombre.Text,
                                                        idTipoIdentificacion = (int) comboBox1.SelectedValue,
                                                        identificacionVisitante = txtDocIdentidad.Text,
                                                        telefonos = txtTelefonos.Text,
                                                        direccion = txtDireccion.Text,
                                                        empresa = txtEmpresa.Text,
                                                        fechaUltimaGestion = DateTime.Now,
                                                        foto = ut.Image2Bytes(fotoUsuario.BackgroundImage)
                                                    };
                                try
                                {
                                    db.AddToTVisitante(tv1);
                                    db.SaveChanges();
                                    idVisitante = tv1.idVisitante;
                                    //MessageBox.Show("El resgitro se agrego con exito!", "Gestion CAV12", MessageBoxButtons.OK);
                                }
                                catch (Exception ex)
                                {
                                    
                                    MessageBox.Show("Error: " + ex.Message, "Sistema Control de Acceso",
                                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    return;
                                }
                            }

                            else
                            {
                                MessageBox.Show("Error: Informacion del Visitante Incompleta",
                                                "Sistema Control de Acceso",
                                                MessageBoxButtons.OK, MessageBoxIcon.Error);

                                return;
                            }

                            #endregion

                            #region 2. Insertar visita Programada
                            
                            tv2 = new TVisitaProgramada()
                                      {
                                          DescripcionVisita = "Entrada Portería",
                                          fechaInicio = dtFecha1.Value,
                                          fechafin = dtFecha2.Value,
                                          idEmpresa = (int) rdEmpresaDestino.SelectedValue,
                                          idEmpleado = (int) rdEmpleadoDestino.SelectedValue,
                                          ObservacionesVisita = txtObservaciones.Text,
                                          idEstadoVisita = 1,
                                          fechaUltimaGestion = DateTime.Now,
                                          usuarioUltimaGestion =
                                              (int) BGCOP.CAVTOP.WINFORMS.Program.idUsuarioActual

                                      };
                            try
                            {
                                db.AddToTVisitaProgramada(tv2);
                                db.SaveChanges();
                                idVisitaProgramada = tv2.idVisitaProgramada;
                                //MessageBox.Show("El resgitro se agrego con exito!", "Gestion CAV12", MessageBoxButtons.OK);
                            }
                            catch (Exception ex)
                            {

                                MessageBox.Show("Error: " + ex.Message, "Sistema Control de Acceso",
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Error);
                                return;
                            }


                            #endregion

                            if (checkBox1.Checked == true)
                            {
                                //es una visita programada
                                //no cambia estado de la tarjeta
                            }
                            else
                            {
                                //no es 
                                #region 2.5 cambiar estado de la tarjeta

                                var tarjeta =
                                    (from tj in db.TTarjeta where tj.numtarjeta == cmbTarjeta.Text select tj).FirstOrDefault
                                        ();
                                tarjeta.esutilizada = true;
                                tarjeta.esvisitante = true;
                                tarjeta.fechavisi1 = dtFecha1.Value;
                                tarjeta.fechavisi2 = dtFecha2.Value;
                                try
                                {

                                    db.SaveChanges();

                                    //MessageBox.Show("El resgitro se agrego con exito!", "Gestion CAV12", MessageBoxButtons.OK);
                                }
                                catch (Exception ex)
                                {

                                    MessageBox.Show("Error: " + ex.Message, "Sistema Control de Acceso",
                                                    MessageBoxButtons.OK,
                                                    MessageBoxIcon.Error);
                                    return;
                                }

                                #endregion
                            }
                            

                            #region 3. Llenar tabla visitante visita programada

                            if (checkBox1.Checked == true)
                            {
                                //es programada
                                tv4 = new TVisitanteVisitaProgramada()
                                {
                                    idEmpleadoAutorizaEntrada =
                                        (int)rdEmpleadoDestino.SelectedValue,
                                    idVisitaProgramada = idVisitaProgramada,
                                    idVisitante = idVisitante,
                                    fechaLlegada = dtFecha1.Value,
                                    fechaSalida = dtFecha2.Value,
                                    fechaUltimaGestion = DateTime.Now,
                                    ObservacionesVisita = txtObservaciones.Text,
                                    usuarioUltimaGestion =
                                        (int)
                                        BGCOP.CAVTOP.WINFORMS.Program.idUsuarioActual,
                                    visitacumplida = false

                                    //falta agregar el maestro de tarjetas
                                };
                            }
                            else
                            {
                                tv4 = new TVisitanteVisitaProgramada()
                                {
                                    idEmpleadoAutorizaEntrada =
                                        (int)rdEmpleadoDestino.SelectedValue,
                                    idVisitaProgramada = idVisitaProgramada,
                                    idVisitante = idVisitante,
                                    fechaLlegada = dtFecha1.Value,
                                    fechaSalida = dtFecha2.Value,
                                    fechaUltimaGestion = DateTime.Now,
                                    ObservacionesVisita = txtObservaciones.Text,
                                    usuarioUltimaGestion =
                                        (int)
                                        BGCOP.CAVTOP.WINFORMS.Program.idUsuarioActual,
                                    visitacumplida = true,
                                    idTarjeta = (int)cmbTarjeta.SelectedValue

                                    //falta agregar el maestro de tarjetas
                                };
                            }
                            
                            try
                            {
                                db.AddToTVisitanteVisitaProgramada(tv4);

                                var tv7 = new TVisitanteVisitaProgramadaLog()
                                {
                                    idEmpleadoAutorizaEntrada =
                                        (int)rdEmpleadoDestino.SelectedValue,
                                    idVisitaProgramada = idVisitaProgramada,
                                    idVisitante = idVisitante,
                                    fechaRegistro = DateTime.Now,
                                    fechaLlegada = dtFecha1.Value,
                                    fechaSalida = dtFecha2.Value,
                                    fechaUltimaGestion = DateTime.Now,
                                    ObservacionesVisita = txtObservaciones.Text,
                                    usuarioUltimaGestion =
                                        (int)
                                        BGCOP.CAVTOP.WINFORMS.Program.idUsuarioActual,
                                    visitacumplida = false

                                    //falta agregar el maestro de tarjetas
                                };
                                db.AddToTVisitanteVisitaProgramadaLog(tv7);

                                db.SaveChanges();
                                transaction.Complete();
                                idVisitaProgramada = tv4.idVisitaProgramada;
                                MessageBox.Show("El resgitro se agrego con exito!", "Gestion CAV12",
                                                MessageBoxButtons.OK);
                                limpiaCampos();
                            }
                            catch (Exception ex)
                            {

                                MessageBox.Show("Error: " + ex.Message, "Sistema Control de Acceso",
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Error);
                                return;
                            }

                            

                            #endregion



                            break;
                        case 2:
                            //es existente 
                            //modifica los datos del visitante y la visita
                            var objV = (from vi in db.TVisitante where vi.idVisitante == idVisitante select vi).FirstOrDefault();
                            try
                            {
                                objV.nombreVisitante = txtNombre.Text;
                                objV.idTipoIdentificacion = (int) comboBox1.SelectedValue;
                                objV.identificacionVisitante = txtDocIdentidad.Text;
                                objV.telefonos = txtTelefonos.Text;
                                objV.direccion = txtDireccion.Text;
                                objV.empresa = txtEmpresa.Text;
                                objV.fechaUltimaGestion = DateTime.Now;
                                objV.foto = ut.Image2Bytes(fotoUsuario.BackgroundImage);
                                db.SaveChanges();
                            }
                            catch (Exception)
                            {
                                
                                
                            }
                            if (checkBox1.Checked == true)
                            {
                                //es una visita programada
                                //no cambia estado de la tarjeta
                            }
                            else
                            {
                                //no es 
                                #region 2.5 cambiar estado de la tarjeta

                                var tarjeta =
                                    (from tj in db.TTarjeta where tj.numtarjeta == cmbTarjeta.Text select tj).FirstOrDefault
                                        ();
                                tarjeta.esutilizada = true;
                                tarjeta.esvisitante = true;
                                tarjeta.fechavisi1 = dtFecha1.Value;
                                tarjeta.fechavisi2 = dtFecha2.Value;
                                try
                                {

                                    db.SaveChanges();

                                    //MessageBox.Show("El resgitro se agrego con exito!", "Gestion CAV12", MessageBoxButtons.OK);
                                }
                                catch (Exception ex)
                                {

                                    MessageBox.Show("Error: " + ex.Message, "Sistema Control de Acceso",
                                                    MessageBoxButtons.OK,
                                                    MessageBoxIcon.Error);
                                    return;
                                }

                                #endregion
                            }
                            

                            #region 3. Llenar tabla visitante visita programada

                            if (checkBox1.Checked == true)
                            {
                                //es programada
                                idVisitaProgramada = Convert.ToInt32( cmbProgramada.SelectedValue);
                                tv4 = new TVisitanteVisitaProgramada()
                                {
                                    idEmpleadoAutorizaEntrada =
                                        (int)rdEmpleadoDestino.SelectedValue,
                                    idVisitaProgramada = idVisitaProgramada,
                                    idVisitante = idVisitante,
                                    fechaLlegada = dtFecha1.Value,
                                    fechaSalida = dtFecha2.Value,
                                    fechaUltimaGestion = DateTime.Now,
                                    ObservacionesVisita = txtObservaciones.Text,
                                    usuarioUltimaGestion =
                                        (int)
                                        BGCOP.CAVTOP.WINFORMS.Program.idUsuarioActual,
                                    visitacumplida = false

                                    //falta agregar el maestro de tarjetas
                                };
                            }
                            else
                            {
                                #region 2. Insertar visita Programada

                                tv2 = new TVisitaProgramada()
                                          {
                                              DescripcionVisita = "Entrada Portería",
                                              fechaInicio = dtFecha1.Value,
                                              fechafin = dtFecha2.Value,
                                              idEmpresa = (int)rdEmpresaDestino.SelectedValue,
                                              idEmpleado = (int)rdEmpleadoDestino.SelectedValue,
                                              ObservacionesVisita = txtObservaciones.Text,
                                              idEstadoVisita = 1,
                                              fechaUltimaGestion = DateTime.Now,
                                              usuarioUltimaGestion =
                                                  (int)BGCOP.CAVTOP.WINFORMS.Program.idUsuarioActual

                                          };
                                try
                                {
                                    db.AddToTVisitaProgramada(tv2);
                                    db.SaveChanges();
                                    idVisitaProgramada = tv2.idVisitaProgramada;
                                    //MessageBox.Show("El resgitro se agrego con exito!", "Gestion CAV12", MessageBoxButtons.OK);
                                }
                                catch (Exception ex)
                                {

                                    MessageBox.Show("Error: " + ex.Message, "Sistema Control de Acceso",
                                                    MessageBoxButtons.OK,
                                                    MessageBoxIcon.Error);
                                    return;
                                }


                                #endregion
                                tv4 = new TVisitanteVisitaProgramada()
                                {
                                    idEmpleadoAutorizaEntrada =
                                        (int)rdEmpleadoDestino.SelectedValue,
                                    idVisitaProgramada = idVisitaProgramada,
                                    idVisitante = idVisitante,
                                    fechaLlegada = dtFecha1.Value,
                                    fechaSalida = dtFecha2.Value,
                                    fechaUltimaGestion = DateTime.Now,
                                    ObservacionesVisita = txtObservaciones.Text,
                                    usuarioUltimaGestion =
                                        (int)
                                        BGCOP.CAVTOP.WINFORMS.Program.idUsuarioActual,
                                    visitacumplida = true,
                                    idTarjeta = (int)cmbTarjeta.SelectedValue

                                    //falta agregar el maestro de tarjetas
                                };

                                var tv6 = new TVisitanteVisitaProgramadaLog()
                                {
                                    idEmpleadoAutorizaEntrada =
                                        (int)rdEmpleadoDestino.SelectedValue,
                                    idVisitaProgramada = idVisitaProgramada,
                                    idVisitante = idVisitante,
                                    fechaRegistro = DateTime.Now,
                                    fechaLlegada = dtFecha1.Value,
                                    fechaSalida = dtFecha2.Value,
                                    fechaUltimaGestion = DateTime.Now,
                                    ObservacionesVisita = txtObservaciones.Text,
                                    usuarioUltimaGestion =
                                        (int)
                                        BGCOP.CAVTOP.WINFORMS.Program.idUsuarioActual,
                                    visitacumplida = false

                                    //falta agregar el maestro de tarjetas
                                };
                                db.AddToTVisitanteVisitaProgramadaLog(tv6);
                            }
                            
                            try
                            {
                                db.AddToTVisitanteVisitaProgramada(tv4);

                               

                                db.SaveChanges();
                                transaction.Complete();
                                idVisitaProgramada = tv4.idVisitaProgramada;
                                MessageBox.Show("El resgitro se agrego con exito!", "Gestion CAV12",
                                                MessageBoxButtons.OK);
                                limpiaCampos();
                            }
                            catch (Exception ex)
                            {

                                MessageBox.Show("Error: " + ex.Message, "Sistema Control de Acceso",
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Error);
                                return;
                            }

                            

                            #endregion
                            break;
                        case 3:
                            //responde a una programada
                            //idVisitanteF = consulta.idVisitante;
                            //idvisitaprogramada = squery[0].idvisitap;
                            var objV1 = (from vi in db.TVisitante where vi.idVisitante == idVisitante select vi).FirstOrDefault();
                            try
                            {
                                objV1.nombreVisitante = txtNombre.Text;
                                objV1.idTipoIdentificacion = (int) comboBox1.SelectedValue;
                                objV1.identificacionVisitante = txtDocIdentidad.Text;
                                objV1.telefonos = txtTelefonos.Text;
                                objV1.direccion = txtDireccion.Text;
                                objV1.empresa = txtEmpresa.Text;
                                objV1.fechaUltimaGestion = DateTime.Now;
                                objV1.foto = ut.Image2Bytes(fotoUsuario.BackgroundImage);
                                db.SaveChanges();
                            }
                            catch (Exception)
                            {
                                
                                
                            }
                            if (checkBox1.Checked == true)
                            {
                                //es una visita programada
                                //no cambia estado de la tarjeta
                            }
                            else
                            {
                                //no es 
                                #region 2.5 cambiar estado de la tarjeta

                                
                                try
                                {
                                    var tarjeta =
                                    (from tj in db.TTarjeta where tj.numtarjeta == cmbTarjeta.Text select tj).FirstOrDefault
                                        ();
                                    tarjeta.esutilizada = true;
                                    tarjeta.esvisitante = true;
                                    tarjeta.fechavisi1 = dtFecha1.Value;
                                    tarjeta.fechavisi2 = dtFecha2.Value;
                                    db.SaveChanges();

                                    //MessageBox.Show("El resgitro se agrego con exito!", "Gestion CAV12", MessageBoxButtons.OK);
                                }
                                catch (Exception ex)
                                {

                                    MessageBox.Show("Error: " + ex.Message, "Sistema Control de Acceso",
                                                    MessageBoxButtons.OK,
                                                    MessageBoxIcon.Error);
                                    return;
                                }

                                #endregion
                            }

                            #region Procesar visita programada
                             var programada = (from a in db.TVisitanteVisitaProgramada
                                              where
                                                  a.idVisitante == idVisitanteF &&
                                                  a.idVisitaProgramada == idvisitaprogramada
                                              select a).FirstOrDefault();
                            programada.idTarjeta = (int)cmbTarjeta.SelectedValue;
                            programada.visitacumplida = true;
                            try
                            {

                                db.SaveChanges();

                                //agregar el registro de visita en el log

                                var tv5 = new TVisitanteVisitaProgramadaLog()
                                {
                                    idEmpleadoAutorizaEntrada =
                                        (int)rdEmpleadoDestino.SelectedValue,
                                    idVisitaProgramada = programada.idVisitaProgramada,
                                    idVisitante = idVisitante,
                                    fechaRegistro = DateTime.Now, 
                                    fechaLlegada = dtFecha1.Value,
                                    fechaSalida = dtFecha2.Value,
                                    fechaUltimaGestion = DateTime.Now,
                                    ObservacionesVisita = txtObservaciones.Text,
                                    usuarioUltimaGestion =
                                        (int)
                                        BGCOP.CAVTOP.WINFORMS.Program.idUsuarioActual,
                                    visitacumplida = false

                                    //falta agregar el maestro de tarjetas
                                };
                                db.AddToTVisitanteVisitaProgramadaLog(tv5);
                                db.SaveChanges();
                                transaction.Complete();
                                
                                MessageBox.Show("El resgitro se agrego con exito!", "Gestion CAV12",
                                                MessageBoxButtons.OK);
                                limpiaCampos();
                            }
                            catch (Exception ex)
                            {

                                MessageBox.Show("Error: " + ex.Message, "Sistema Control de Acceso",
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Error);
                                return;
                            }
                            #endregion
                           
                            break;
                    }
                }
            }




        }

       private void button6_Click(object sender, EventArgs e)
        {
            fotoUsuario.BackgroundImage = Properties.Resources.personal;
        }

       private void fotoUsuario_DoubleClick(object sender, EventArgs e)
       {
           
       }

      
      
       private void frmVisitante_KeyPress(object sender, KeyPressEventArgs e)
       {
           if (e.KeyChar == 27)
           {
               limpiaCampos();
           }
       }

       private void checkBox1_CheckedChanged(object sender, EventArgs e)
       {
           label13.Enabled = checkBox1.Checked;
           cmbProgramada.Enabled = Convert.ToBoolean(checkBox1.Checked);
           cmbTarjeta.Enabled = !Convert.ToBoolean(checkBox1.Checked);
           label9.Enabled = !checkBox1.Checked;
           if (checkBox1.Checked)
           {
               
           }
           else
           {
               dtFecha1.Enabled = true;
               dtFecha2.Enabled = true;
           }
       }

       private void fillByNoutilizadaToolStripButton_Click(object sender, EventArgs e)
       {
           try
           {
               //this.tTarjetaTableAdapter.FillByNoutilizada(this.masterDBACDataSet.TTarjeta);
               this.tTarjetaTableAdapter.Fill((this.masterDBACDataSet.TTarjeta));
           }
           catch (System.Exception ex)
           {
               System.Windows.Forms.MessageBox.Show(ex.Message);
           }

       }

       private void fillByVisitasActivasToolStripButton_Click(object sender, EventArgs e)
       {
           try
           {
               this.tVisitaProgramadaTableAdapter.FillByVisitasActivas(this.masterDBACDataSet.TVisitaProgramada);
           }
           catch (System.Exception ex)
           {
               System.Windows.Forms.MessageBox.Show(ex.Message);
           }

       }

       private void cmbProgramada_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
       {
           try
           {
               //this.tEmpresaTableAdapter.FillByidEmpresa(this.masterDBACDataSet.TEmpresa, Convert.ToInt32(textBox1.Text));
               using (masterDBACEntities db = new masterDBACEntities())
               {
                   var datos = (from a in db.TVisitaProgramada
                               join b in db.TEmpleado on a.idEmpleado equals b.idEmpleado
                               join c in db.TDivisionEmpresa on b.idDivisionEmpresa equals c.IdDivisionEmpresa
                               join d in db.TEmpresa on c.IdEmpresa equals d.idEmpresa
                               where a.idVisitaProgramada == (Decimal)cmbProgramada.SelectedValue
                               select new
                                          {
                                              idempresa=d.idEmpresa,
                                              idDivision=c.IdDivisionEmpresa,
                                              idemple=b.idEmpleado,
                                              f1= a.fechaInicio,
                                              f2= a.fechafin 
                                          }).FirstOrDefault();
                   rdEmpresaDestino.SelectedValue = datos.idempresa;
                   rdDivisionDestino.SelectedValue = datos.idDivision;
                   rdEmpleadoDestino.SelectedValue = datos.idemple;
                   dtFecha1.Value = (DateTime) datos.f1;
                   dtFecha2.Value = (DateTime) datos.f2;
                   dtFecha1.Enabled = false;
                   dtFecha2.Enabled = false;

               }
           }
           catch (Exception ex)
           {
               Console.WriteLine(ex.Message);

           }
               
           
       }

       private void rdEmpleadoDestino_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
       {
           if (rdEmpleadoDestino.SelectedIndex >= 0)
           {

               this.tEmpresaTableAdapter.FillByidEmpresa(this.masterDBACDataSet.TEmpresa, Convert.ToInt32( lblIdEmp.Text) );
               rdEmpresaDestino.Rebind();
           }
       }

       private void fotoUsuario_Click(object sender, EventArgs e)
       {

       }

       private void button2_Click(object sender, EventArgs e)
       {
           //desde camara conectada al equipo
           try
           {
               using (frmCamara wc = new frmCamara())
               {
                   wc.u = fotoUsuario;
                   wc.ShowDialog();
               }
           }
           catch (Exception)
           {
               
               
           }
          
           ////verificar la toma de la imagen desde el recusros seleccionado
           //if (radioButton1.Checked)
           //{
           //    //desde archivo existente 
           //    openFileDialog1.ShowDialog();
           //    string ubicacion = openFileDialog1.FileName;
           //    if (ubicacion.Length > 0)
           //    {
           //        try
           //        {
           //            fotoUsuario.BackgroundImage = new Bitmap(ubicacion);
           //        }
           //        catch (Exception ex)
           //        {

           //            fotoUsuario.BackgroundImage = Properties.Resources.personal;
           //        }
           //    }
           //}
           //else if (radioButton2.Checked)
           //{
              
           //}
       }

       private void timer1_Tick(object sender, EventArgs e)
       {
           timer1.Enabled = false;
           // TODO: This line of code loads data into the 'masterDBACDataSet.TTarjeta' table. You can move, or remove it, as needed.
           //this.tTarjetaTableAdapter.FillByNoutilizada(this.masterDBACDataSet.TTarjeta);
           this.tTarjetaTableAdapter.Fill(this.masterDBACDataSet.TTarjeta);
           // TODO: This line of code loads data into the 'masterDBACDataSet.TEmpleado' table. You can move, or remove it, as needed.
           this.tEmpleadoTableAdapter.Fill(this.masterDBACDataSet.TEmpleado);
           // TODO: This line of code loads data into the 'masterDBACDataSet.TDivisionEmpresa' table. You can move, or remove it, as needed.
           this.tDivisionEmpresaTableAdapter.Fill(this.masterDBACDataSet.TDivisionEmpresa);
           // TODO: This line of code loads data into the 'masterDBACDataSet.TEmpresa' table. You can move, or remove it, as needed.
           //this.tEmpresaTableAdapter.Fill(this.masterDBACDataSet.TEmpresa);
           this.tEmpresaTableAdapter.FillByidEmpresa(this.masterDBACDataSet.TEmpresa, -1);
           // TODO: This line of code loads data into the 'masterDBACDataSet.TVisitaProgramada' table. You can move, or remove it, as needed.
           this.tVisitaProgramadaTableAdapter.FillByVisitasActivas(this.masterDBACDataSet.TVisitaProgramada);
           // TODO: This line of code loads data into the 'masterDBACDataSet.TTipoIdentificacion' table. You can move, or remove it, as needed.
           this.tTipoIdentificacionTableAdapter.Fill(this.masterDBACDataSet.TTipoIdentificacion);
           txtDocIdentidad.Focus();
           inicio();
       }

      

       
    }
}
